<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            ES6 引入了一种新的原始数据类型`Symbol`，表示独一无二的值。
            Symbol 值通过`Symbol`函数生成。   
         */

        console.log(Symbol);

        let sym1 = Symbol();
        console.log(sym1, typeof sym1); //Symbol() 'symbol'

        let sym2 = Symbol();
        console.log(sym2, typeof sym2); //Symbol() 'symbol'



        // 表示独一无二的值，与任何数据都不相等
        console.log(sym1 == sym2);//false


        //  Symbol数据不能进行运算
        // console.log(sym1 + 10); //TypeError: Cannot convert a Symbol value to a number  


        // 标识符
        // Symbol([val]);
        let sym3 = Symbol("username");
        let sym4 = Symbol("password");
        console.log(sym3,sym4);
        



        let obj1 = {name:"哈哈",age:100};
        obj1.name = "呵呵";
        console.log(obj1);   //修改了


        // []语法：中括号中可以放数据，变量，表达式...
        

        // 获取值得时候可以使用中括号语法，设置值同样可以使用中括号语法
        // Symbol可以用在对象中，当作键使用。
        let symbol1 = Symbol('name');
        let symbol2 = Symbol('age');

        let testObj = {
            [symbol1]:"孙悟空",
            [symbol2]:200
        };


        // 获取
        console.log(testObj[symbol1],testObj[symbol2]);

        // 设置
        testObj[symbol1] = "猪八戒";
        console.log(testObj);
    </script>
</body>

</html>